home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / TIMING.SWG / 0022_A good Timer unit.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-24  |  2KB  |  92 lines

  1.  
  2. UNIT Timer;
  3. INTERFACE
  4.  
  5. TYPE
  6.   tTimerObject = object
  7.     TimerTicks : LONGINT;
  8.     MaxSeconds : LONGINT;
  9.     PROCEDURE Start(Amount : LONGINT);
  10.     FUNCTION  ElapsedSeconds : LONGINT;
  11.     FUNCTION  Remaining : LONGINT;
  12.     FUNCTION  Expired : BOOLEAN;
  13.     FUNCTION  PrintableTimer(Tics : LONGINT) : STRING;
  14.   END;
  15.  
  16. IMPLEMENTATION
  17. VAR
  18.   TicksSinceMidnight : LONGINT ABSOLUTE $0040 : $006c;
  19.  
  20.   PROCEDURE tTimerObject.Start(Amount : LONGINT);
  21.   BEGIN
  22.     TimerTicks := TicksSinceMidnight;
  23.     MaxSeconds := Amount;
  24.   END;
  25.  
  26.   FUNCTION tTimerObject.ElapsedSeconds : LONGINT;  { elapsed time in seconds }
  27.   CONST
  28.     TicksPerDay = 1573040;
  29.     TicksPerSecond = 18.20648;
  30.   VAR
  31.     ElapsedTicks : LONGINT;
  32.  
  33.   BEGIN
  34.     ElapsedTicks := TicksSinceMidnight;
  35.     IF (ElapsedTicks >= TimerTicks) THEN
  36.       ElapsedTicks := ElapsedTicks - TimerTicks
  37.     ELSE      { Midnight rollover occurred }
  38.       ElapsedTicks := TicksPerDay - TimerTicks + ElapsedTicks;
  39.     ElapsedSeconds := ROUND (ElapsedTicks / TicksPerSecond);
  40.   END;
  41.  
  42.   FUNCTION tTimerObject.Expired : BOOLEAN;  { Has this timer expired ?? }
  43.   BEGIN
  44.   Expired := (ElapsedSeconds > MaxSeconds);
  45.   END;
  46.  
  47.   FUNCTION tTimerObject.Remaining : LONGINT;  { How many seconds remain? }
  48.   BEGIN
  49.   IF Expired THEN Remaining := 0 ELSE
  50.      Remaining := MaxSeconds - ElapsedSeconds;
  51.   END;
  52.  
  53.   FUNCTION tTimerObject.PrintableTimer(Tics : LONGINT) : STRING;
  54.   { return a printable time string }
  55.  
  56.     VAR
  57.       S, T : STRING;
  58.       Hour, Min, Sec, Time : LONGINT;
  59.       i : INTEGER;
  60.  
  61.     BEGIN
  62.     Hour := (Tics div 3600);
  63.     Min  := (Tics div 60);
  64.     Sec  := Tics - (Min * 60);
  65.     STR(Min : 2, T);
  66.     IF T[1] = #32 THEN T[1] := '0';
  67.     S := T + ':';
  68.     STR(Sec : 2, T);
  69.     IF T[1] = #32 THEN T[1] := '0';
  70.     S := S + T;
  71.     PrintableTimer := S;
  72.     END;
  73. END.
  74.  
  75. { ----------------------------   DEMO   ----------------------- }
  76.  
  77. uses
  78.   CRT, Timer;
  79. var
  80.   t : tTimerObject;
  81.  
  82. begin
  83.   ClrScr;
  84.   t.Start(10);  { set a 10 second timer }
  85.   GoToXY(1,1); Write(t.TimerTicks);
  86.   repeat
  87.   GoToXY(1,2); Write(t.PrintableTimer(t.Remaining));
  88.   GoToXY(1,3); Write(t.PrintableTimer(t.ElapsedSeconds));
  89.   until (t.Expired);  { wait until it expires }
  90.   Readkey;
  91. end.
  92.